#include "av_logic_manager.h"
// 1. ffmpeg持续生成yuv420p，然后编码在推流
// 2. 打开mp4文件，解封装、解码、假装在渲染
// 3. ffmpeg持续生成yuv420p，然后编码、封装成mp4文件
// 4. 打开mp4文件，解封装、封装，模拟录制场景

// demux——>decode  渲染, 模拟播放器录制, 数据来源为mp4文件
// demux——>mux     录制1: 模拟播放器录制, 比如此时播放器将流媒体协议传过来的数据解封装，可以直接进行封装并保存成文件, 数据来源为mp4文件
// encode——>mux    录制2: 模拟传感器数据录制, 数据来源为ffmpeg实时生成的yuv图像, 拓展: 这里可以模拟多种图像格式和多种编码格式
// encode——>rtsp   多路推流
namespace lcf
{
    bool AVLogicManager::Start()
    {
        bool res = demuxer_->Open("/home/code/cpp/AVProcessor/resource/test.mp4");
        // 运行任务
        RenderTask();
        RecordTaskFromPlayer();
        //  启动责任节点
        demuxer_->Start();
        decoder_->Start();
        muxer_->Start();
        // encoder_->Start();
    }
    bool AVLogicManager::Stop()
    {
        if (demuxer_->IsExit())
            demuxer_->Stop();
        if (muxer_->IsExit())
            muxer_->Stop();
        if (decoder_->IsExit())
            decoder_->Stop();
        if (encoder_->IsExit())
            encoder_->Stop();
    }

    bool AVLogicManager::RenderTask()
    {
        demuxer_->SetSuccessor(decoder_, true); // 队列太小可能导致解码不及时？
    }

    bool AVLogicManager::RecordTaskFromPlayer()
    {
        demuxer_->SetSuccessor(muxer_, true);
        // 添加录制时长的逻辑
    }

    bool AVLogicManager::RecordTaskFromCamera()
    {
        // encoder_->SetSuccessor(muxer_, true);
        // 添加录制时长的逻辑
        return true;
    }

    bool AVLogicManager::StreamTask()
    {
        // encoder_->SetSuccessor(rtsp, true);
        return true;
    }
}